package com.atguigu.jxc.dao;

import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.entity.Unit;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface GoodsDao extends BaseMapper<Goods> {
    /**
     * 查询goods的列表
     * @param index limit 的索引值
     * @param rows
     * @param codeOrName
     * @param goodsTypeIdList
     * @return
     */
    List<Goods> selectPage(@Param("index") Integer index, @Param("rows")Integer rows, @Param("codeOrName")String codeOrName, @Param("goodsTypeIdList") List<Integer> goodsTypeIdList);

    /**
     * 查询goods的数量
     * @param codeOrName
     * @param goodsTypeIdList
     * @return
     */
    Integer selectCountOfGoods(@Param("codeOrName") String codeOrName, @Param("goodsTypeIdList") List<Integer> goodsTypeIdList);

    /**
     * 查询所有的商品分类
     * @return 返回list的json字符串
     */
    List<GoodsType> selectListOfGoodsType();

    /**
     * 查询所有商品单位
     * @return
     */
    List<Unit> selectUnitList();

    /**
     * 新增分类
     * @param goodsType
     */
    void insertGoodsType(GoodsType goodsType);

    /**
     * 删除分类
     * @param goodsTypeId
     */
    void deleteGoodsType(Integer goodsTypeId);

    /**
     * 根据goodsTypeId找出GoodsType
     * @param goodsTypeId
     * @return
     */
    GoodsType selectGoodsTypeById(Integer goodsTypeId);

    /**
     * 根据pid找出所有三级分类GoodsTypeId
     * @param pid
     * @return
     */
    List<Integer> selectGoodsTypeIdListByPid(Integer pid);

    /**
     * 新增商品
     * @param goods
     */
    void insertGoods(Goods goods);

    /**
     * 修改商品
     * @param goods
     */
    void updateGoods(Goods goods);

    /**
     * 生成goodsCode
     * @return
     */
    Integer selectGoodsCode();

    /**
     * 根据goodsId找出Goods
     * @param goodsId
     * @return
     */
    Goods selectGoods(Integer goodsId);

    /**
     * 根据goodsId删除Goods
     * @param goodsId
     */
    void deleteGoods(Integer goodsId);

    /**
     * 无或有库存商品列表展示（可以根据商品名称或编码查询）
     * @param index
     * @param rows
     * @param nameOrCode
     * @param flag 使用true或false, 标识查询有库存或无库存
     * @return
     */
    List<Goods> selectPageNoOrHasInventoryQuantity(@Param("index") Integer index, @Param("rows")Integer rows, @Param("nameOrCode")String nameOrCode, @Param("flag")Boolean flag);

    /**
     * 查询所有 当前库存量 小于 库存下限的商品信息
     * @return
     */
    List<Goods> selectGoodsList();

}
